part of "../group.dart";

/// 一组表格[Tables]
/// 其实就是将表格以List的形式组织起来
///
/// 但由于它可以进行一些额外的操作（比如“融合”扩展），因此作为一个单独的类
typedef Tables<G, T> = List<Group<G, T>>;

extension CombineTables<G, T> on Tables<G, T> {
  /// 比如说，一共有10个医院，每个医院都有一张[Group]表格，统计了不同日期出生的每一个婴儿
  /// 那么如果我是市长，就用这个方法将每个医院的表格[List]合并起来，就可以知道这个城市每天出生了哪些婴儿
  Group<G, T> combine() {
    // 避免reduce在空List上报错
    if (isEmpty) return {};

    // 本质上是以两张表格为单位，一一进行合并
    // 最后返回统一的结果
    return reduce((table1, table2) {
      Group<G, T> newGroups = Group<G, T>.from(table1);
      newGroups.merge(table2);
      return newGroups;
    });
  }
}
